package com.eastfair.builder.exceptioncode;

import com.eastfair.annotation.base.LanguageTypeEnum;
import com.eastfair.core.context.ContextUtil;
import com.eastfair.core.exception.code.BaseExceptionCode;

/**
 * 场馆服务后台错误码.
 * AABBBCCC   AA(15)  系统编号   BBB 模块    CCC 具体异常
 * 模块编号
 * 展商：001
 * 服务：002
 * 报馆：003
 * 证件：004
 * 订单：005
 * 合同：006
 *
 * @author dqq
 * @date 2022 /7/14
 */
public enum BuilderExceptionCode implements BaseExceptionCode {

    /*
     *********************展商********************
     */
    /**
     * 展商不存在
     */
    EXHIBITOR_NOT_EXIST(15001001, "展商不存在", ""),
    /**
     * 展位保证金未缴纳
     */
    EXHIBITOR_EARNEST_MONEY_NOT_PAY(15001002, "展位保证金未缴纳", ""),
    /**
     * 展位保证金余额不足
     */
    EXHIBITOR_REMAIN_EARNEST_MONEY_NOT_ENOUGH(15001003, "展位保证金余额不足", ""),

    /**
     * 展位单双层，是否吊点不可编辑.
     */
    EXHIBITOR_SITE_CAN_NOT_UPDATE(15001004, "展位不可编辑", ""),
    /**
     * 搭建商已存在该展位
     */
    EXHIBITOR_SITE_HAS_BIND(15001005, "搭建商已绑定该展位", ""),

    /**
     * 标摊展位不可编辑单双层与是否吊点
     */
    EXHIBITOR_STANDARD_SITE_CAN_NOT_UPDATE(15001006, "标摊展位不可编辑单双层与是否吊点", ""),
    /**
     * 标摊展位无需报馆
     */
    EXHIBITOR_STANDARD_NOT_NEED_REPORT_SPACE(15001007, "标摊展位无需报馆", ""),

    /**
     * 展商邀请码查到的展商展厅在系统中不存在
     */
    EXHIBITOR_SPACE_NOT_EXIST_IN_SYSTEM(15001008, "展商邀请码查到的展商展厅在系统中不存在", ""),

    /**
     * 展商邀请码查到的展商展厅不可为空
     */
    EXHIBITOR_SPACE_NOT_NULL(15001009, "展商邀请码查到的展商展厅不可为空", ""),

    /**
     * 展位重置校验失败
     */
    EXHIBITOR_RESET_VALID_FAILURE(15001888, "展位重置校验失败", ""),

    /*
     *********************报馆********************
     */
    /**
     * 搭建商基本信息不存在
     */
    REPORT_BUILDER_NOT_EXIST(15003001, "搭建商基本信息不存在", ""),
    /**
     * 展位基本信息不存在
     */
    REPORT_SITE_NOT_EXIST(15003002, "展位基本信息不存在", ""),
    /**
     * 主场图纸分类查询错误
     */
    HOME_DRAWING_QUERY_ERROR(15003003, "主场图纸分类查询错误", ""),
    /**
     * 报馆记录不存在
     */
    REPORT_SPACE_NOT_EXIST(15003004, "报馆记录不存在", ""),
    /**
     * 报馆图纸不存在
     */
    REPORT_DRAWING_NOT_EXIST(15003006, "报馆图纸不存在", ""),
    /**
     * 主场负责的场馆不存在
     */
    HOME_SPACE_NOT_EXIST(15003007, "主场负责的场馆不存在", ""),
    /**
     * 报馆记录已存在
     */
    REPORT_SPACE_HAS_EXIST(15003008, "报馆记录已存在", ""),
    /**
     * 展位基本信息已存在
     */
    REPORT_SITE_HAS_EXIST(15003009, "展位基本信息已存在", ""),
    /**
     * 搭建商信息已存在
     */
    REPORT_BUILDER_HAS_EXIST(15003010, "搭建商信息已存在", ""),
    /**
     * 不可提交报馆
     */
    REPORT_SPACE_CAN_NOT_SUBMIT(15003011, "不可提交报馆", ""),
    /**
     * 不可取消提交报馆.
     */
    REPORT_SPACE_CAN_NOT_CANCEL_SUBMIT(15003012, "不可取消提交报馆", ""),

    /**
     * 报馆记录不需要场馆审核.
     */
    REPORT_SPACE_NOT_NEED_AUDIT_BY_VENUE(15003013, "报馆记录不需要场馆审核", ""),

    /**
     * 身份证号码重复提交，请核对后重试.
     */
    CARD_NUMBER_EXIST(15003014, "身份证号码重复提交，请核对后重试", ""),

    /**
     * 身份证号码长度有误，请核对后重试.
     */
    CARD_NUMBER_ERROR(15003015, "身份证号码长度有误，请核对后重试", ""),

    /**
     * 姓名不能超过20位长度.
     */
    NAME_MORE_THAN_20(15003016, "姓名不能超过20位长度", ""),

    /**
     * 服务是商集合不能为空
     */
    NOT_SERVICE_PROVIDER_NULL(16001001, "服务是商集合不能为空", ""),

    /**
     * 用户id集合不能为空
     */
    NOT_USER_ID_NULL(16001002, "用户id集合不能为空", ""),

    /**
     * 角色菜单不能为空
     */
    NOT_ROLE_MENU_NULL(16001003,"角色菜单不能为空",""),
    ;

    private final int code;
    /**
     * 中文消息
     */
    private String msg;
    /**
     * 英文消息
     */
    private String enMsg;

    BuilderExceptionCode(int code, String msg, String enMsg) {
        this.code = code;
        this.msg = msg;
        this.enMsg = enMsg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        //中英文切换
        if (LanguageTypeEnum.CN.name().equals(ContextUtil.getLanguageType())) {
            //中文
            return msg;
        } else if (LanguageTypeEnum.EN.name().equals(ContextUtil.getLanguageType())) {
            //英文
            return enMsg;
        }
        return msg;
    }


    /**
     * Build venue booking exception code.
     *
     * @param msg   the msg
     * @param param the param
     * @return the venue booking exception code
     */
    public BuilderExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    /**
     * Param venue booking exception code.
     *
     * @param param the param
     * @return the venue booking exception code
     */
    public BuilderExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}